#target "indesign"
(function () {
    if (app.documents.length === 0) {
        alert("请先打开一个 InDesign 文档。");
        return;
    }

    var doc = app.activeDocument;
    var secs = doc.sections;

    if (secs.length === 0) {
        alert("此文档中没有任何已设置“开始新章节”的页面（Sections）。");
        return;
    }

    // —— 选择编号方式：N=数字，A=字母（A..Z, AA..）——
    var mode = prompt("请输入编号方式：N（数字）或 A（字母）", "A");
    if (!mode) return;
    mode = String(mode).toUpperCase();
    if (mode !== "N" && mode !== "A") { alert("编号方式无效，只能是 N 或 A"); return; }

    // —— 输入“从第几个章节开始替换”（1-based）——
    var startSectionIndex = parseInt(prompt("从第几个章节开始替换？（1 表示从第一个章节开始）", "1"), 10);
    if (isNaN(startSectionIndex) || startSectionIndex < 1 || startSectionIndex > secs.length) {
        alert("起始章节序号无效。有效范围：1 ~ " + secs.length);
        return;
    }

    // —— 输入起始值、增量 ——（字母模式中 1=A，26=Z，27=AA）
    var startNum = parseInt(prompt("请输入起始值：\n数字模式=从该数开始；字母模式=1=A, 26=Z, 27=AA", "1"), 10);
    if (isNaN(startNum)) { alert("起始值无效"); return; }

    var step = parseInt(prompt("请输入增量（可为负数）：", "1"), 10);
    if (isNaN(step) || step === 0) { alert("增量无效（需为非零整数）"); return; }

    // —— 数字 -> 字母（Excel 列名风格）：1->A, 26->Z, 27->AA —— 
    function numberToLetters(n) {
        if (n <= 0) return "" + n; // <=0 做保护性回退
        var s = "";
        while (n > 0) {
            var rem = (n - 1) % 26; // 0..25
            s = String.fromCharCode(65 + rem) + s; // 65='A'
            n = Math.floor((n - 1) / 26);
        }
        return s;
    }

    app.doScript(function () {
        var appliedCount = 0; // 只对“被替换的章节”计数，用于计算起始值+增量
        for (var i = 0; i < secs.length; i++) {
            var s = secs[i];

            // 跳过起始章节之前的所有章节
            if (i + 1 < startSectionIndex) continue;

            // 对第 startSectionIndex 个及之后的章节，按序计算编号：
            var idx = startNum + (appliedCount * step);
            var prefix = (mode === "N")
                ? String(idx)
                : (idx > 0 ? numberToLetters(idx) : String(idx));

            s.sectionPrefix = prefix;

            // 确保“包含章节前缀”生效（页码显示带前缀）
            try {
                if (s.hasOwnProperty("includeSectionPrefix")) {
                    s.includeSectionPrefix = true;
                } else if (doc.hasOwnProperty("pageNumberingOptions") &&
                           doc.pageNumberingOptions.hasOwnProperty("includeSectionPrefix")) {
                    doc.pageNumberingOptions.includeSectionPrefix = true;
                }
            } catch (e) {}

            appliedCount++;
        }
    }, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "选择起始章节的批量前缀替换");

    alert("完成：已从第 " + startSectionIndex + " 个章节开始，按模式 " + mode +
          " 设置前缀。起始值=" + startNum + "，增量=" + step + "。总计修改章节数将取决于起始位置。");
})();
